package Fisica.Cooperativa;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import Fisica.Conexion;
import Logica.Cooperativa.Articulo;
import Logica.Cooperativa.Comprobante;
import Logica.Cooperativa.Deposito;
import Logica.Cooperativa.Operador;
import Logica.Cooperativa.Proveedores;

public class ProcCoope {
	
	public static ResultSet rs;
	public static PreparedStatement st;
	public static Connection con;
	
	
	
	public static List<Operador> lisOperador (){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Operador> lista = new ArrayList();	
		String sql = "select * from operadores where operador_observa = 'activo' and operador_apellido <> 'ADMINISTRADOR';";
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			
			Operador a;
			while (rs.next()){
				a = new Operador(); 
				a.setCodigo(rs.getString(1)); 				
				a.setApellido(rs.getString(2));				
				a.setCateg(rs.getInt(3));					
				a.setClave(rs.getString(4));			 	
				a.setObserva(rs.getString(5));				
				a.setAcceso(rs.getString(6));							
				
				lista.add(a);
				}
			close(rs, st, con);
//			rs.close();
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 	
		
		return lista;		
	}
	
//	listProveedores
	public static List<Proveedores> listProveedores(){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Proveedores> lista = new ArrayList();	
		String sql = "select * from ctacte_padron where padron_catego = 3 order by padron_apelli, padron_nombre;";
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			Proveedores a; 
			while (rs.next()){
				a = new Proveedores();
				a.setPadronCodigo(rs.getInt("padron_codigo")); 				
				a.setNombre(rs.getString("padron_nombre"));				
				a.setApellido(rs.getString("padron_apelli"));					
				a.setDomicilio(rs.getString("padron_domici"));				
				lista.add(a);
				}
			close(rs, st, con);
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 		
		return lista;		
	}
	
	
	public static Proveedores getProveedor (String apellido, String nombre){
		String sql= "select * from ctacte_padron where padron_catego = 3";
		
		if (apellido.length()>0 && nombre.length()>0){
			sql += " and padron_apelli = '"+apellido+"' and padron_nombre = '"+nombre+"'";
		}else 
			if(apellido.length()>0){
				sql += " and padron_apelli = '"+apellido+"'";
			}else{
				sql += " and padron_nombre = '"+nombre+"'";
			}
		sql += ";";
//				+ " where padron_catego = 3 and padron_apelli = '"+apellido+"' and padron_nombre = '"+nombre+"';";
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			
			Proveedores a = new Proveedores();
			if (rs.next()){
				 
				a.setPadronCodigo(rs.getInt("padron_codigo")); 				
				a.setNombre(rs.getString("padron_nombre"));				
				a.setApellido(rs.getString("padron_apelli"));					
				a.setDomicilio(rs.getString("padron_domici"));				
			}	
			close(rs, st, con);
			return a;

		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Proveedores();
	}
	
	public static Proveedores getProveedor (int padron){
		String sql= "select * from ctacte_padron where padron_catego = 3 and padron_codigo = "+padron+";";
			
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			
			Proveedores a = new Proveedores(); 
			if (rs.next()){				
				a.setPadronCodigo(rs.getInt("padron_codigo")); 				
				a.setNombre(rs.getString("padron_nombre"));				
				a.setApellido(rs.getString("padron_apelli"));					
				a.setDomicilio(rs.getString("padron_domici"));	
				a.setCuit(rs.getLong("padron_cuit11"));
			}	
			close(rs, st, con);
			return a;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Proveedores();
	}
	
	
	public static Operador getOperador (String operador_apellido){
		String sql = "select * from operadores where operador_apellido = '"+operador_apellido+"';";
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			
			Operador a = new Operador(); 
			if (rs.next()){				
				a.setCodigo(rs.getString(1)); 				
				a.setApellido(rs.getString(2));				
				a.setCateg(rs.getInt(3));					
				a.setClave(rs.getString(4));			 	
				a.setObserva(rs.getString(5));				
				a.setAcceso(rs.getString(6));	
			}	
			close(rs, st, con);
			return a;
//			rs.close();
//			st.close();
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Operador();
	}
	
	public static Articulo getArticulo (String cod_barra){
		String sql = "select a.* "
				+ "from fac_articulos_barras as b, fac_articulos as a "
				+ "where (b.art_barras = '"+cod_barra+"' or a.art_codigo = '"+cod_barra+"')"
				+ "and b.art_codigo = a.art_codigo;";
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();			
			
			Articulo a = new Articulo(); 
			if (rs.next()){				
				a.setCodInterno(rs.getString("art_codigo")); 	
				a.setCodBarra(rs.getString("art_barras"));
				a.setDescripcion(rs.getString("art_descri"));	
			}	
			close(rs, st, con);
			return a;
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		} 				
		return new Articulo();
	}
	
	public static List<Deposito> lisDeposito (){
		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Deposito> lista = new ArrayList();	
		Deposito d1, d2;
		d1 = new Deposito(0, "Minorista");
		d2 = new Deposito(1, "Mayorista");
		lista.add(d1);
		lista.add(d2);		
		return lista;		
	}
	
	
	public static List<Comprobante> lisComprobante (){

		@SuppressWarnings({ "unchecked", "rawtypes" })
		List<Comprobante> lista = new ArrayList();	
		
		String sqlFactura = "select * from fac_comprobante where comp_descri like 'fac%';";
		String sqlNota = "select * from fac_comprobante where comp_descri like 'nota%' order by comp_descri asc;";
		
		try {
			PreparedStatement stFactura, stNota;
			con = Conexion.getConexion();
			stFactura = con.prepareStatement(sqlFactura);	
			stNota = con.prepareStatement(sqlNota);	
			
			ResultSet rsFactura, rsNota;
			rsFactura = stFactura.executeQuery();	
			rsNota = stNota.executeQuery();
			
			Comprobante c;
			while (rsFactura.next()){
				c = new Comprobante();
				c.setTipo_comp(rsFactura.getInt("tipo_comp"));
				c.setDescri(rsFactura.getString("comp_descri"));
				c.setDescri2(rsFactura.getString("comp_descri2"));
				c.setDgi(rsFactura.getInt("comp_dgi"));
				c.setComp_tipo(rsFactura.getString("comp_tipo"));				
								
				lista.add(c);
			}	
			
			while (rsNota.next()){
				c = new Comprobante();
				c.setTipo_comp(rsNota.getInt("tipo_comp"));
				c.setDescri(rsNota.getString("comp_descri"));
				c.setDescri2(rsNota.getString("comp_descri2"));
				c.setDgi(rsNota.getInt("comp_dgi"));
				c.setComp_tipo(rsNota.getString("comp_tipo"));				
								
				lista.add(c);
			}
			
			close(rsFactura, stFactura, null);
			close(rsNota, stNota, con);			
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		
	return lista;		
	
	}
	
	
	public static Comprobante getComprobante (String comprobante, int tipo_comp){
		String sql = "select * from fac_comprobante";	
		
		if (comprobante.length() > 0 ){
			sql +=  " where comp_descri = '"+comprobante+"'";
		} 
		else if (tipo_comp > 0){
			sql += " where tipo_comp = "+tipo_comp+"";
		}
		sql += ";";
		
		try {
			con = Conexion.getConexion();
			st = con.prepareStatement(sql);	
			rs = st.executeQuery();	
			
			Comprobante c = new Comprobante();
			if (rs.next()){
				
				c.setTipo_comp(rs.getInt("tipo_comp"));
				c.setDescri(rs.getString("comp_descri"));
				c.setDescri2(rs.getString("comp_descri2"));
				c.setDgi(rs.getInt("comp_dgi"));
				c.setComp_tipo(rs.getString("comp_tipo"));	
			}	
			close(rs, st, con);
			return c;
						
		} catch (SQLException e) {
			System.out.print("ERROR EN LA RECUPERACION DE DATOS DE LA BASE");
			e.printStackTrace();
		}
		return new Comprobante();
	}
	
	public static void close(ResultSet rs, PreparedStatement st, Connection con)
	{
	    if (rs!=null)
	    {
	        try
	        {   rs.close();
	        }catch(SQLException e)
	        { 	e.printStackTrace();
	        }
	    }
	    if (st != null)
	    {
	        try
	        {   st.close();
	        } catch (SQLException e)
	        {  	e.printStackTrace();
	        }
	    }
	    if (con != null)
	    {
	        try
	        {con.close();
	        } catch (SQLException e)
	        {	e.printStackTrace();
	        }
	    }
	}
	

	public static void main(String[] args) {
		ProcCoope p = new ProcCoope();
		p.lisOperador();


	}

}
